#ifndef __STACK__
#define __STACK__

#define STACK_MAX_SIZE 50
typedef struct stack
{
    int data[STACK_MAX_SIZE];
    int top;
}SqStack;

#include<stdbool.h>
#include<stdlib.h>

/**
 * 这里top初始值为-1，那么在入栈的时候要先+1，再放元素
 * 出栈的时候，先出元素再减1
 * 也可以是0，但是删除和插入操作会不一样
 */
void initStack(SqStack *s){
    s->top=-1;
}
bool stackEmpty(SqStack*s){
    if(s->top==-1){
        return true;
    }else{
        return false;
    }
}
bool pushStack(SqStack *s,int x){
    if(s->top==STACK_MAX_SIZE-1){
        return false;//栈满了
    }else{
        s->top++;
        s->data[s->top]=x;
        return true;
    }
}


/**
 * pop要移动指针
 */
bool popStack(SqStack*s,int *x){
    if(s->top==-1){
        return false;
    }else{
        (*x)=s->data[s->top];
        s->top--;
        return true;
    }
}
/**
 * top不用移动指针，只是查看原始，不传地址
 * 但是要求如果s的top为-1的时候，出栈失败
 * 这里和STL里面的stack是一样的，所有开始要先判空
 */
bool getTopStack(SqStack s,int *x){
    if(s.top==-1){
        return false;
    }else{
        (*x)=s.data[s.top];
        return true;
    }
    
}



#endif